// // 手写Object.defineProperty(简易版)
// const obj = {
//   name: '刘逍',
//   age: 20
// }

// Observer(obj)
// function Observer(obj) {
//   for (let k in obj) {
//     if (obj[k] instanceof Object) {
//       Observer(obj[k])
//     } else {
//       let value = obj[k]
//       Object.defineProperty(obj, k, {
//         get() {
//         console.log('读取内容')
//         return value
//        },
//         set(newValue) {
//         console.log('设置内容')
//         value=newValue
//       }
//    })
//     }
//   }
// }

// console.log(obj.name)
// obj.age = 12
// console.log(obj.age)

//手写proxy 监听数据 (简易版)
// const obj = {
//   name: '刘逍',
//   age: 20
// }

// const _handler = {
//   get(target, prop) {
//     console.log('有人读取了属性')
//     return Reflect.get(target,prop)
//   },
//   set(target, prop,value) {
//     console.log('有人设置了属性')
//     return Reflect.set(target,prop,value)
//    },
//   delete(target, prop) {
//     console.log('有人删除了属性')
//     return Reflect.delete(target,prop)
//    }
// }
// const p=new Proxy(obj,_handler)
// console.log(p.name)
// p.age = 12
// console.log(p.age)
// proxy 相比defineProperty 可以监听到整个数组，监听的方法不仅仅限制于get,set

const obj = [1]
Object.defineProperty(obj, 1, {
  get() {
    console.log('get')
  },
  set() {
    console.log('set')
  }
})
console.log(obj[1])